home *** CD-ROM | disk | FTP | other *** search
/ PC Player 2004 May / pc player 2004-05.iso / Demos / FarCry / Data1.cab / _70CF5518C22347DBB9E02283A6B4C0B5 < prev    next >
Encoding:
Text File  |  2004-01-06  |  4.1 KB  |  144 lines

  1. // ===============================================================
  2. // Vertex Program: General ambient template programm
  3. // Description: 
  4. // Last Update: 14/08/2003
  5. // Coder: Andrey Honich
  6. // ===============================================================
  7.  
  8.       #include "../CGVPMacro.csi"
  9.  
  10.       DefaultPos
  11.       AutoEnumTC
  12.  
  13.       VertAttributes
  14.       {
  15.         POSITION_3
  16.         TEXCOORD0_2
  17. #if %DOT3LM || %LM
  18.         TEXCOORD1_2
  19. #endif        
  20. #if %ENVCMAMB || %ENVLIGHT
  21.         TNORMAL_3
  22. #elif   %ENVCMSPEC
  23.         TANG_3X3
  24. #endif
  25.       }
  26.       
  27.       MainInput
  28.       {
  29.         VIEWPROJ_MATRIX,
  30. #if %ENVCMAMB
  31.         CAMERA_POS,
  32.         uniform float4x4 TexMatrix,
  33. #elif %ENVLIGHT
  34.         uniform float4 EnvColors[6],
  35.         uniform float4x4 TexMatrix,
  36. #elif %ENVCMSPEC
  37.         CAMERA_POS,
  38.         uniform float4x4 ModelMatrix,
  39. #endif
  40.       }
  41.       DeclarationsScript
  42.       {
  43.         struct appin
  44.         {
  45.           float4 Position  : POSITION;
  46.           float4 baseTC    : TEXCOORD0;
  47. #if %DOT3LM || %LM
  48.           float4 lmTC      : TEXCOORD1;
  49. #endif
  50. #if %ENVLIGHT || %ENVCMAMB
  51.           IN_TNORMVEC
  52. #elif %ENVCMSPEC
  53.           IN_TANGVECS
  54. #endif
  55.         };
  56.         
  57.         // define outputs from vertex shader
  58.         struct vertout
  59.         {
  60.           float4 HPosition  : POSITION;
  61.           float4 baseTC     : TEXCOORDN;
  62. #if %LM
  63.           float4 lmTC       : TEXCOORDN;
  64. #elif %DOT3LM
  65.   #if %BUMP_MAP
  66.           float4 bumpTC     : TEXCOORDN;
  67.   #endif
  68.           float4 lmTC       : TEXCOORDN;
  69.           float4 lmdirTC    : TEXCOORDN;
  70. #endif
  71. #if %ENVLIGHT
  72.           float4 Color      : COLOR0;
  73. #elif %ENVCMAMB
  74.           float4 envTC      : TEXCOORDN;
  75. #elif %ENVCMSPEC
  76.   #if !%DOT3LM && %BUMP_MAP
  77.           float4 bumpTC     : TEXCOORDN;
  78.   #endif
  79.           float4 viewVec    : TEXCOORDN;
  80.           float4 tangVec    : TEXCOORDN;
  81.           float4 binormVec  : TEXCOORDN;
  82.           float4 normVec    : TEXCOORDN;
  83. #endif          
  84.         };
  85.       }
  86.       PositionScript = PosCommon
  87.       CoreScript
  88.       {
  89.         OUT.baseTC.xy = IN.baseTC.xy;
  90.     #if %ENVCMSPEC && %GLOSS_MAP
  91.         OUT.baseTC.zw = IN.baseTC.xy;
  92.     #endif
  93.     
  94. #if %LM
  95.         OUT.lmTC.xy = IN.lmTC.xy;
  96. #elif %DOT3LM
  97.   #if %BUMP_MAP
  98.         OUT.bumpTC.xy  = IN.baseTC.xy;
  99.   #endif
  100.         OUT.lmTC.xy    = IN.lmTC.xy;
  101.         OUT.lmdirTC.xy = IN.lmTC.xy;
  102. #endif
  103.  
  104. #if %ENVCMAMB
  105.         float3 vVec = CameraPos.xyz - vPos.xyz;
  106.         float3 tCamVec = normalize(vVec);
  107.         float3 tNormal = IN.TNormal.xyz;
  108.         float3 tRef = dot(tNormal.xyz, tCamVec.xyz) * tNormal.xyz * 2 - tCamVec.xyz;
  109.         float4 tRM;
  110.         tRM.xyz = tRef.xyz;
  111.         tRM.w = vPos.w;
  112.         OUT.envTC = mul(tRM, TexMatrix);
  113. #elif %ENVLIGHT
  114.         // Calculate average radiosity color from 6 colors (Cube)
  115.         float3 tNormal;
  116.         tNormal = mul((float3x3)TexMatrix, IN.TNormal.xyz);        
  117.         float3 Compare1 = step(tNormal, 0);
  118.         float3 Compare0 = 1 - Compare1;
  119.         float3 signN = sign(tNormal);
  120.         tNormal = tNormal * tNormal;
  121.         tNormal = tNormal * signN;
  122.         float4 ColorX = EnvColors[0]*tNormal.x*Compare0.x + EnvColors[1]*(-tNormal.x)*Compare1.x;
  123.         float4 ColorY = EnvColors[2]*tNormal.y*Compare0.y + EnvColors[3]*(-tNormal.y)*Compare1.y;
  124.         float4 ColorZ = EnvColors[4]*tNormal.z*Compare0.z + EnvColors[5]*(-tNormal.z)*Compare1.z;
  125.         OUT.Color = (ColorX + ColorY + ColorZ) * 2.0;
  126. #elif %ENVCMSPEC
  127.         TANG_MATR
  128.  
  129.   #if !%DOT3LM && %BUMP_MAP
  130.         OUT.bumpTC.xy  = IN.baseTC.xy;
  131.   #endif
  132.         float3 viewVec = CameraPos.xyz - vPos.xyz;
  133.         OUT.viewVec.xyz = mul(objToTangentSpace, viewVec.xyz);
  134.  
  135.         float3 worldTangentS = mul((const float3x3)ModelMatrix, objToTangentSpace[0]);
  136.         float3 worldTangentT = mul((const float3x3)ModelMatrix, objToTangentSpace[1]);
  137.         float3 worldNormal   = mul((const float3x3)ModelMatrix, objToTangentSpace[2]);
  138.  
  139.           OUT.tangVec.xyz = worldTangentS;
  140.           OUT.binormVec.xyz = worldTangentT;
  141.           OUT.normVec.xyz = worldNormal;
  142. #endif          
  143.       }
  144.